package com.core;

import java.util.Map;

/**
 * <p>
 * Title: Print
 * </p>
 * <p>
 * Description: 每隔500ms输出一次map中的数据
 * </p>
 * 
 * @author 詹金浩
 * @date 2018年11月6日
 */
public class Print extends Thread {
	private Map<String, PortGuidance> map;
	private RegsService regsService = new RegsService();
	
	private static final long DISTANCE = 2000l;
	
	public Print(Map<String, PortGuidance> map) {
		this.map = map;
	}
	
	public void run() {
		/**
		 * 缺失	while (true) {}：			就变成了一次输出
		 * 缺失	synchronized (printFlag){}：	就锁不住
		 * 缺失	if(printFlag) {}：			就缺失对输出状态的判断
		 * 
		 * synchronized (printFlag) {}放在第一级：就会变成单线程
		 * if(printFlag) {}必须放在synchronized (printFlag) {}之后
		 * 
		 * 改成	while (printFlag) {
		 * 			 synchronized (printFlag){}
		 * 		}							：
		 */
		while (true) {
			/**
			 * 一定一定不能放在锁里面
			 * 无论printFlag的值是什么都必须输出一次，这样处理完成后会输出一次
			 */
			try {
				Thread.sleep(DISTANCE);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (map) {
				regsService.printInfos(map);
				if(map.containsKey("end")) {
					return;
				}
			}
		}
	}
}